home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / comms / other / slrn / slrn_src / src / vms.c < prev    next >
C/C++ Source or Header  |  1999-05-14  |  3KB  |  165 lines

  1. /*
  2.  *  Project   : tin - a Usenet reader
  3.  *  Module    : vms.c
  4.  *  Author    : Andrew Greer
  5.  *  Created   : 19-06-95
  6.  *  Updated   : 19-06-95
  7.  *  Notes     :
  8.  *  Copyright : (c) Copyright 1991-95 by Iain Lea & Andrew Greer
  9.  *              You may  freely  copy or  redistribute  this software,
  10.  *              so  long as there is no profit made from its use, sale
  11.  *              trade or  reproduction.  You may not change this copy-
  12.  *              right notice, and it must be included in any copy made
  13.  * 
  14.  * 
  15.  * Note: This file was originally donated for use in slrn by Andrew Greer.
  16.  *       Since then, it has been modified and made more bullet-proof for 
  17.  *       use in slrn.
  18.  */
  19.  
  20. #include "config.h"
  21. #include "slrnfeat.h"
  22.  
  23. #ifdef VMS
  24.  
  25. #include <stdio.h>
  26. #include <ctype.h>
  27. #include <descrip.h>
  28. #include <iodef.h>
  29. #include <ssdef.h>
  30. #include <uaidef.h>
  31. #include <string.h>
  32. #include <stdlib.h>
  33. #include <file.h>
  34.  
  35. #include "vms.h"
  36.  
  37. char *slrn_vms_getlogin (void)
  38. {
  39.    return getenv ("USER");
  40. }
  41.  
  42. static struct dsc$descriptor *c$dsc(char *c$_str)
  43. {
  44.    static struct dsc$descriptor c$_tmpdesc;
  45.    
  46.    c$_tmpdesc.dsc$w_length = strlen(c$_str);
  47.    c$_tmpdesc.dsc$b_dtype  = DSC$K_DTYPE_T;
  48.    c$_tmpdesc.dsc$b_class  = DSC$K_CLASS_S;
  49.    c$_tmpdesc.dsc$a_pointer= c$_str;
  50.    return(&c$_tmpdesc);
  51. }
  52.  
  53. char *slrn_vms_get_uaf_fullname (void)
  54. {
  55.    static char uaf_owner[40];
  56.    char loc_username[13];
  57.    unsigned int i, pos, max_len;
  58.    char *user;
  59.  
  60.    struct item_list 
  61.      {
  62.     short bl, ic;
  63.     char *ba;
  64.     short *rl;
  65.      }
  66.    getuai_itmlist[] = 
  67.      {
  68.       {
  69.          sizeof(uaf_owner),
  70.            UAI$_OWNER,
  71.            &uaf_owner[0],
  72.            0
  73.       },
  74.       { 0, 0, 0, 0}
  75.      };
  76.  
  77.    if (NULL == (user = slrn_vms_getlogin ()))
  78.      user = "";
  79.  
  80.    /* Apparantly, loc_username must be padded with blanks */
  81.    max_len = sizeof (loc_username) - 1;
  82.    strncpy (loc_username, user, max_len);
  83.    i = strlen (user);
  84.    while (i < max_len)
  85.      {
  86.     loc_username [i] = ' ';
  87.     i++;
  88.      }
  89.    loc_username[max_len] = 0;
  90.  
  91.    sys$getuai(0,0,c$dsc(loc_username),getuai_itmlist,0,0,0);
  92.    
  93.    pos=1;
  94.    if (uaf_owner[pos]=='|')
  95.      pos += 3;
  96.    while (uaf_owner[pos] == ' ')
  97.      pos++;
  98.    uaf_owner[uaf_owner[0] + 1] = '\0';
  99.    return(uaf_owner + pos);
  100. }
  101.  
  102. /* Converts "TOD_MCQUILLIN" to "Tod McQuillin" */
  103. char *slrn_vms_fix_fullname(char *p)
  104. {
  105.    unsigned char cc = 0;
  106.    char *q, ch;
  107.    
  108.    q = p;
  109.    
  110.    while ((ch = *q) != 0)
  111.      {
  112.     if (cc == 0)
  113.       ch = toupper (ch);
  114.     else
  115.       {
  116.          if ((cc == 2) && (*(q-1) == 'c') && (*(q - 2) == 'M'))
  117.            ch = toupper (ch);
  118.          else 
  119.            ch = tolower (ch);
  120.       }
  121.     
  122.     if (ch == '_') ch = ' ';
  123.     
  124.     *q = ch;
  125.  
  126.     if (ch == ' ') 
  127.       cc = 0;
  128.     else 
  129.       cc++;
  130.  
  131.     q++;
  132.      }
  133.    return p;
  134. }
  135.  
  136. #ifndef __CRTL_VER
  137. # define __CRTL_VER 00000000
  138. #endif
  139.  
  140. #if __VMS_VER < 70000000
  141. FILE *
  142. popen (
  143.        char *command,
  144.        char *mode)
  145. {
  146.    return NULL;
  147. }
  148.  
  149.  
  150. int
  151. pclose (FILE *pipe)
  152. {
  153.    return 1;
  154. }
  155. #endif
  156.  
  157. #if __CRTL_VER < 70000000
  158. void tzset(void)
  159. {
  160.    return;
  161. }
  162. #endif
  163.  
  164. #endif /* VMS */
  165.